'''
    针对users应用,定义的一些工具的模块
'''



from users.models import User
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
# 自定义用户身份认证后端,实现多账号登入验证
class UsernameMobileAuthBackend(ModelBackend):

    def authenticate(self, request, username=None, password=None, **kwargs):
        '''
            实现登入验证 —— 验证用户名(账号)和密码
        :param request: 请求对象
        :param username: 账号,有可能是用户名,有可能是手机号,以及有可能是邮箱
        :param password: 明文密码
        :return: 用户对象 或 None
        '''


        # TODO:自定义多账号验证逻辑
        try:
            user = User.objects.get(
                Q(username=username) | Q(mobile=username)
            )
        except User.DoesNotExist as e:
            # 根据username或mobile都过滤不到用户对象,认证失败返回None
            return None

        if user.check_password(password):
            # 密码正确,认证成功,返回用户对象
            return user